home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ShareWare OnLine 2
/
ShareWare OnLine Volume 2 (CMS Software)(1993).iso
/
games2
/
rotise12.zip
/
STANDING.C
< prev
next >
Wrap
Text File
|
1993-03-28
|
7KB
|
245 lines
/* Determine standings */
#include <stdio.h>
#ifdef __TURBOC__
#include <stdlib.h>
#include <io.h>
#endif
#include "rotise.h"
typedef struct {
RDB_TEAM *team;
float value;
} RANKDATA;
extern RDB_TEAM *RotoTeams; /* roster.c */
extern int RotoTeamCnt; /* roster.c */
void standings PROTO( (void ));
void wk_standings PROTO( (void) );
void ranka PROTO( (RANKDATA *rank_array, RDB_TEAM *team, int tcnt, double value) );
void rankd PROTO( (RANKDATA *rank_array, RDB_TEAM *team, int tcnt, double value) );
void figger_pnts PROTO( (RANKDATA *rank_array, int which1) );
static RANKDATA rank_sb[MAX_TEAMS], rank_hr[MAX_TEAMS], rank_rbi[MAX_TEAMS], rank_avg[MAX_TEAMS],
rank_w[MAX_TEAMS], rank_ratio[MAX_TEAMS], rank_era[MAX_TEAMS], rank_s[MAX_TEAMS];
void standings NOARGLIST
{
RDB_TEAM *team;
int tcnt, pnt;
float tempf;
for ( tcnt = 0, team = RotoTeams; team != NULL; team = team->next, tcnt++ )
{ /* sort all the teams */
tempf = team->batters.bs_sb;
ranka( rank_sb, team, tcnt, tempf );
ranka( rank_rbi, team, tcnt, (double)team->batters.bs_rbi );
ranka( rank_hr, team, tcnt, (double)team->batters.bs_hr );
ranka( rank_avg, team, tcnt, avg( &team->batters ) );
ranka( rank_s, team, tcnt, (double)team->pitchers.ps_saved );
ranka( rank_w, team, tcnt, (double)team->pitchers.ps_won );
rankd( rank_ratio, team, tcnt, ratio( &team->pitchers ) );
rankd( rank_era, team, tcnt, era( &team->pitchers ) );
}
figger_pnts( rank_sb, RANK_SB );
figger_pnts( rank_hr, RANK_HR );
figger_pnts( rank_rbi, RANK_RBI );
figger_pnts( rank_avg, RANK_AVG );
figger_pnts( rank_w, RANK_WINS );
figger_pnts( rank_ratio, RANK_RATIO );
figger_pnts( rank_era, RANK_ERA );
figger_pnts( rank_s, RANK_SVS );
for ( team = RotoTeams; team != NULL; team = team->next )
{ /* now, figger total points for each team */
for ( team->totalPnts = pnt = 0; pnt < RANKSIZE; pnt++ )
{ /* add all the points */
team->totalPnts += team->points[pnt];
}
}
}
void wk_standings NOARGLIST
{
RDB_TEAM *team;
int tcnt, pnt;
float tempf;
for ( tcnt = 0, team = RotoTeams; team != NULL; team = team->next, tcnt++ )
{ /* sort all the teams */
tempf = team->bweek.bs_sb;
ranka( rank_sb, team, tcnt, tempf );
ranka( rank_rbi, team, tcnt, (double)team->bweek.bs_rbi );
ranka( rank_hr, team, tcnt, (double)team->bweek.bs_hr );
ranka( rank_avg, team, tcnt, avg( &team->bweek ) );
ranka( rank_s, team, tcnt, (double)team->pweek.ps_saved );
ranka( rank_w, team, tcnt, (double)team->pweek.ps_won );
rankd( rank_ratio, team, tcnt, ratio( &team->pweek ) );
rankd( rank_era, team, tcnt, era( &team->pweek ) );
}
figger_pnts( rank_sb, RANK_SB );
figger_pnts( rank_hr, RANK_HR );
figger_pnts( rank_rbi, RANK_RBI );
figger_pnts( rank_avg, RANK_AVG );
figger_pnts( rank_w, RANK_WINS );
figger_pnts( rank_ratio, RANK_RATIO );
figger_pnts( rank_era, RANK_ERA );
figger_pnts( rank_s, RANK_SVS );
for ( team = RotoTeams; team != NULL; team = team->next )
{ /* now, figger total points for each team */
for ( team->totalPnts = pnt = 0; pnt < RANKSIZE; pnt++ )
{ /* add all the points */
team->totalPnts += team->points[pnt];
}
}
}
/* ranka -- rank ascending (higher values get higher ranks) */
void ranka( rank_array, team, tcnt, value )
RANKDATA *rank_array;
RDB_TEAM *team;
int tcnt;
double value;
{
int kk;
for ( kk = 0; kk < tcnt; kk++ )
{ /* look thru array to see where this team goes */
if ( value > rank_array[kk].value )
{ /* okay, so just break */
break;
}
}
/* found a spot, move down the lower ones */
for ( ; kk < tcnt; tcnt-- )
{ /* move down all the other ones */
rank_array[tcnt].team = rank_array[tcnt-1].team;
rank_array[tcnt].value = rank_array[tcnt-1].value;
}
rank_array[kk].team = team;
rank_array[kk].value = value;
}
/* rankd -- rank descending (lower values get higher ranks) */
void rankd( rank_array, team, tcnt, value )
RANKDATA *rank_array;
RDB_TEAM *team;
int tcnt;
double value;
{
int kk;
for ( kk = 0; kk < tcnt; kk++ )
{ /* look thru array to see where this team goes */
if ( value < rank_array[kk].value )
{ /* okay, so just break */
break;
}
}
/* found a spot, move down the lower ones */
for ( ; kk < tcnt; tcnt-- )
{ /* move down all the other ones */
rank_array[tcnt].team = rank_array[tcnt-1].team;
rank_array[tcnt].value = rank_array[tcnt-1].value;
}
rank_array[kk].team = team;
rank_array[kk].value = value;
}
void figger_pnts( ranks, rankX )
RANKDATA *ranks;
int rankX;
{
int kk;
int base;
float rank;
for( base = 0; base < RotoTeamCnt; )
{ /* base is first of a range of identical values */
for( kk = base+1; kk < RotoTeamCnt; ++kk )
{ /* Find end of range */
if ( ranks[kk].value != ranks[base].value )
break;
}
/* Calculate ranking for each value in the range */
rank = (float)RotoTeamCnt - ((float)(base + kk -1))/2;
for( ; base != kk; ++base )
{ /* Assign the rankings to the teams */
ranks[base].team->points[rankX] = rank;
}
}
}
/* print_histogram -- print a histogram of current rankings. */
void print_histogram ARGLIST( ( fP, weekF ) )
NFARG( FILE *fP ) /* File to print histogram into */
FARG( int weekF ) /* If doing for the week */
{
int teamN; /* Team number */
fprintf( fP, " # %7s %6s %7s %5s %6s %5s %10s %14s\n\n",
"Avg", "HR", "RBI", "SB",
"W", "Sv", "ERA", "Ratio"
);
for ( teamN = 0; teamN < RotoTeamCnt; ++teamN )
{
if ( weekF )
fprintf( fP, " %2d .%3d/%-3d %2d/%-3d %2d/%-3d %2d/%-3d %2d/%-3d %2d/%-2d %6.3f/%-6.3f %7.4f/%-7.4f\n",
RotoTeamCnt - teamN,
(int)(rank_avg[teamN].value * 1000),
(int)(avg(&rank_avg[teamN].team->batters) * 1000),
(int)rank_hr[teamN].value,
(int)rank_hr[teamN].team->batters.bs_hr,
(int)rank_rbi[teamN].value,
(int)rank_rbi[teamN].team->batters.bs_rbi,
(int)rank_sb[teamN].value,
(int)rank_sb[teamN].team->batters.bs_sb,
(int)rank_w[teamN].value,
(int)rank_w[teamN].team->pitchers.ps_won,
(int)rank_s[teamN].value,
(int)rank_s[teamN].team->pitchers.ps_saved,
rank_era[teamN].value,
era(&rank_era[teamN].team->pitchers),
rank_ratio[teamN].value,
ratio(&rank_ratio[teamN].team->pitchers)
);
else
fprintf( fP, " %2d .%3d/%-3d %3d/%-2d %3d/%-2d %3d/%-2d %3d/%-2d %2d/%-2d %6.3f/%-6.3f %7.4f/%-7.4f\n",
RotoTeamCnt - teamN,
(int)(rank_avg[teamN].value * 1000),
(int)(avg(&rank_avg[teamN].team->bweek) * 1000),
(int)rank_hr[teamN].value,
(int)rank_hr[teamN].team->bweek.bs_hr,
(int)rank_rbi[teamN].value,
(int)rank_rbi[teamN].team->bweek.bs_rbi,
(int)rank_sb[teamN].value,
(int)rank_sb[teamN].team->bweek.bs_sb,
(int)rank_w[teamN].value,
(int)rank_w[teamN].team->pweek.ps_won,
(int)rank_s[teamN].value,
(int)rank_s[teamN].team->pweek.ps_saved,
rank_era[teamN].value,
era(&rank_era[teamN].team->pweek),
rank_ratio[teamN].value,
ratio(&rank_ratio[teamN].team->pweek)
);
}
}